package middle

import (
	"back/constant"
	"back/entity/nailEntity"
	"github.com/gin-gonic/gin"
	"strings"
	"utilx/middleware"
	"utilx/rox"
)

//中间件 handle1 ，洋葱模型

// 用户--》 handle1(next  userjwt ) //  -> handle2 -->
//     <--handle1	<-	handle2 <--

func UserJwt(skips ...func(ctx *gin.Context)) gin.HandlerFunc {
	return func(ctx *gin.Context) {
		for _, handle := range skips {
			handle(ctx)
		}
		// 拦截
		if strings.Contains(ctx.Request.URL.String(), "/login") {
			ctx.Next()
			return
		}
		// 身份认证
		token := ctx.GetHeader(constant.UserAuth)
		if len(token) > 0 {
			//有验证信息
			//jwt 加密  data --》 token --》解密 data
			//middleware.CreatJwtTokenWithClaims()
			claims, err := middleware.ParseWithClaims[nailEntity.NailMember](token)
			if err != nil {
				rox.HandleErr[any](ctx, "auth err", err.Error())
				return
			}
			ctx.Set(constant.UserInfo, claims)
			if claims.Data.Type > 0 {
				ctx.Set(constant.IsAdmin, true)
			} else {
				ctx.Set(constant.IsAdmin, false)
			}
			ctx.Set(constant.UserInfo, claims.Data)
			ctx.Set(constant.UserInfoID, claims.Data.ID)
			ctx.Set(constant.UserInfoCardID, claims.Data.CardID)
			ctx.Next()
			return
		}
		//无验证信息
		rox.HandleErr[any](ctx, "auth err", nil)
	}
}
